package category

import (
	"BookStack/internal/domain/article"
	"BookStack/internal/domain/book"
	"context"
)

// Repository 分类仓库接口
type Repository interface {
	// Create 创建分类
	Create(ctx context.Context, category *Category) error
	// Update 更新分类
	Update(ctx context.Context, category *Category) error
	// Delete 删除分类
	Delete(ctx context.Context, id uint) error
	// GetByID 根据ID获取分类
	GetByID(ctx context.Context, id uint) (*Category, error)
	// GetBySlug 根据Slug获取分类
	GetBySlug(ctx context.Context, slug string) (*Category, error)
	// List 获取分类列表
	List(ctx context.Context, params *ListParams) ([]*Category, int64, error)
	// GetTree 获取分类树
	GetTree(ctx context.Context, categoryType int) ([]*Category, error)
	// UpdateOrder 更新分类排序
	UpdateOrder(ctx context.Context, orders map[uint]int) error
	// UpdateContentCount 更新分类内容数量
	UpdateContentCount(ctx context.Context, id uint, count int64) error
	// GetArticleByID 获取文章
	GetArticleByID(ctx context.Context, id uint) (*article.Article, error)
	// GetBookByID 获取书籍
	GetBookByID(ctx context.Context, id uint) (*book.Book, error)
	// UpdateArticleCategory 更新文章分类
	UpdateArticleCategory(ctx context.Context, articleID uint, categoryID uint) error
	// UpdateBookCategory 更新书籍分类
	UpdateBookCategory(ctx context.Context, bookID uint, categoryID uint) error
}

// ListParams 分类列表查询参数
type ListParams struct {
	Type   int
	Status *int
	Page   int
	Size   int
}

// NewListParams 创建列表查询参数
func NewListParams() *ListParams {
	return &ListParams{
		Page: 1,
		Size: 10,
	}
}
